home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
010
/
advent.arc
/
ADVENT.C
< prev
next >
Wrap
Text File
|
1984-06-10
|
6KB
|
273 lines
/* program ADVENT.C *\
\* WARNING: "advent.c" allocates GLOBAL storage space by *\
\* including "advdef.h". *\
\* All other modules use "advdec.h" */
#include "stdio.h" /* drv = 1.1st file 2.def 3.A */
#include "advent.h" /* #define preprocessor equates */
#include "advword.h" /* definition of "word" array */
#include "advcave.h" /* definition of "cave" array */
#include "advtext.h" /* definition of "text" arrays */
#include "advdef.h"
#define strchr index
extern int fclose();
extern int fgetc();
extern FILE *fopen();
extern int fputc();
extern long ftell();
extern int printf();
extern int setmem();
extern int scanf();
extern int sscanf();
extern char *strcat();
extern char *strchr();
extern unsigned strlen();
extern int tolower();
main(argc, argv)
int argc;
char **argv;
{
int rflag; /* user restore request option */
rflag = 0;
dbugflg = 0;
while (--argc > 0) {
++argv;
if (**argv != '-')
break;
switch(tolower(argv[0][1])) {
case 'r':
++rflag;
continue;
case 'd':
++dbugflg;
continue;
default:
printf("unknown flag: %c\n", argv[0][1]);
continue;
} /* switch */
} /* while */
if (dbugflg < 2)
dbugflg = 0; /* must request three times */
opentxt();
initplay();
if (rflag)
restore();
else if (yes(65, 1, 0))
limit = 1000;
else
limit = 330;
saveflg = 0;
srand(511); /* seed random */
while(!saveflg)
turn();
if (saveflg)
saveadv();
fclose(fd1);
fclose(fd2);
fclose(fd3);
fclose(fd4);
exit(0); /* exit = ok */
} /* main */
/* ************************************************************ */
/*
Initialize integer arrays with sscanf
*/
scanint(pi, str)
int *pi;
char *str;
{
while (*str) {
if ((sscanf(str, "%d,", pi++)) < 1)
bug(41); /* failed before EOS */
while (*str++ != ',') /* advance str pointer */
;
}
return;
}
/*
Initialization of adventure play variables
*/
initplay()
{
turns = 0;
/* initialize location status array */
setmem(cond, (sizeof(int))*MAXLOC, 0);
scanint(&cond[1], "5,1,5,5,1,1,5,17,1,1,");
scanint(&cond[13], "32,0,0,2,0,0,64,2,");
scanint(&cond[21], "2,2,0,6,0,2,");
scanint(&cond[31], "2,2,0,0,0,0,0,4,0,2,");
scanint(&cond[42], "128,128,128,128,136,136,136,128,128,");
scanint(&cond[51], "128,128,136,128,136,0,8,0,2,");
scanint(&cond[79], "2,128,128,136,0,0,8,136,128,0,2,2,");
scanint(&cond[95], "4,0,0,0,0,1,");
scanint(&cond[113], "4,0,1,1,");
scanint(&cond[122], "8,8,8,8,8,8,8,8,8,");
/* initialize object locations */
setmem(place, (sizeof(int))*MAXOBJ, 0);
scanint(&place[1], "3,3,8,10,11,0,14,13,94,96,");
scanint(&place[11], "19,17,101,103,0,106,0,0,3,3,");
scanint(&place[23], "109,25,23,111,35,0,97,");
scanint(&place[31], "119,117,117,0,130,0,126,140,0,96,");
scanint(&place[50], "18,27,28,29,30,");
scanint(&place[56], "92,95,97,100,101,0,119,127,130,");
/* initialize second (fixed) locations */
setmem(fixed, (sizeof(int))*MAXOBJ, 0);
scanint(&fixed[3], "9,0,0,0,15,0,-1,");
scanint(&fixed[11], "-1,27,-1,0,0,0,-1,");
scanint(&fixed[23], "-1,-1,67,-1,110,0,-1,-1,");
scanint(&fixed[31], "121,122,122,0,-1,-1,-1,-1,0,-1,");
scanint(&fixed[62], "121,-1,");
/* initialize default verb messages */
scanint(actmsg, "0,24,29,0,33,0,33,38,38,42,14,");
scanint(&actmsg[11], "43,110,29,110,73,75,29,13,59,59,");
scanint(&actmsg[21], "174,109,67,13,147,155,195,146,110,13,13,");
/* initialize various flags and other variables */
setmem(visited, (sizeof(int))*MAXLOC, 0);
setmem(prop, (sizeof(int))*MAXOBJ, 0);
setmem(&prop[50], (sizeof(int))*(MAXOBJ-50), 0xff);
wzdark = closed = closing = holding = detail = 0;
limit = 100;
tally = 15;
tally2 = 0;
newloc = 3;
loc = oldloc = oldloc2 = 1;
knfloc = 0;
chloc = 114;
chloc2 = 140;
/* dloc[DWARFMAX-1] = chloc */
scanint(dloc, "0,19,27,33,44,64,114,");
scanint(odloc, "0,0,0,0,0,0,0,");
dkill = 0;
scanint(dseen, "0,0,0,0,0,0,0,");
clock = 30;
clock2 = 50;
panic = 0;
bonus = 0;
numdie = 0;
daltloc = 18;
lmwarn = 0;
foobar = 0;
dflag = 0;
gaveup = 0;
saveflg = 0;
return;
}
/*
Open advent?.txt files
*/
opentxt()
{
fd1 = fopen("advent1.txt", "r");
if (!fd1) {
printf("Sorry, I can't open advent1.txt...\n");
exit();
}
fd2 = fopen("advent2.txt", "r");
if (!fd2) {
printf("Sorry, I can't open advent2.txt...\n");
exit();
}
fd3 = fopen("advent3.txt", "r");
if (!fd3) {
printf("Sorry, I can't open advent3.txt...\n");
exit();
}
fd4 = fopen("advent4.txt", "r");
if (!fd4) {
printf("Sorry, I can't open advent4.txt...\n");
exit();
}
}
/*
save adventure game
*/
saveadv()
{
char *sptr;
int savefd;
char username[13];
printf("What do you want to name the saved game? ");
scanf("%s", username);
if (sptr = strchr(username, '.'))
*sptr = '\0'; /* kill extension */
if (strlen(username) > 8)
username[8] = '\0'; /* max 8 char filename */
strcat(username, ".adv");
savefd = fopen(username, "wb");
if (savefd == NULL) {
printf("Sorry, I can't create the file...%s\n", \
username);
exit();
}
for (sptr = &turns; sptr < &lastglob; sptr++) {
if (fputc(*sptr, savefd) == EOF) {
printf("Write error on save file...%s\n", \
username);
exit();
}
}
if (fclose(savefd) == -1) {
printf("Sorry, I can't close the file...%s\n", \
username);
exit();
}
printf("OK -- \"C\" you later...\n");
}
/*
restore saved game handler
*/
restore()
{
char username[13];
int restfd, c;
char *sptr;
printf("What is the name of the saved game? ");
scanf("%s", username);
if (sptr = strchr(username, '.'))
*sptr = '\0'; /* kill extension */
if (strlen(username) > 8)
username[8] = '\0'; /* max 8 char filename */
strcat(username, ".adv");
restfd = fopen(username, "rb");
if (restfd == NULL) {
printf("Sorry, I can't open the file...%s\n", \
username);
exit();
}
for (sptr = &turns; sptr < &lastglobal; sptr++) {
if ((c = fgetc(restfd)) == -1) {
printf("Read error on save file...%s\n", \
username);
exit();
}
*sptr = c;
}
if (fclose(restfd) == -1) {
printf("Warning -- can't close save file...%s\n", \
username);
}
}